package com.mornd.gulimall.ware.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mornd.gulimall.apis.order.to.OrderTo;
import com.mornd.gulimall.apis.ware.to.*;
import com.mornd.gulimall.ware.entity.WareSku;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 商品库存 服务类
 * </p>
 *
 * @author mornd
 * @since 2023-07-29
 */
public interface IWareSkuService extends IService<WareSku> {

    IPage<WareSku> list(WareSku wareSku);

    /**
     * 查询 sku 是否有库存
     * @param skuIds
     * @return
     */
    List<SkusHasStockTo> getSkusHasStock(List<Long> skuIds);

    /**
     * 锁定库存，方式一
     * @return
     */
    OrderLockStockResult orderLockStock(WareSkuLockTo wareSkuLockTo);

    /**
     * 锁定库存，方式二 乐观锁
     * @return 是否全部锁定成功
     */
    boolean orderLockStock2(WareSkuLockTo wareSkuLockTo);

    /**
     * 解锁库存
     * @param mqStockLockedTo
     * @return
     */
    void unlock(MqStockLockedTo mqStockLockedTo);

    void unlock(OrderTo to);
}
